import Select from 'ol/interaction/Select'

// 开启标注工具。返回值如果为false，则表明开启失败，可能有其他工具正处于开启状态。请先关闭其他工具再进行开启。
class PushpinTool {
  constructor(map, pushpinToolOptions) {
    this.marker = pushpinToolOptions.marker // 标注所使用的图标。
    this.cursor = pushpinToolOptions.cursor // 	标注所使用的鼠标样式。
    this.followText = pushpinToolOptions.followText // 跟随鼠标移动的说明文字，默认为空。
    this.selection = undefined
    this.map = map
    this.isAddedMarker = false
    this.markerEndCallback = pushpinToolOptions.markerEndCallback // 回调函数，标记完成后的回调函数；
  }

  open() {
    if (this.selection === undefined) {
      this.selection = new Select()
      this.selectionListerner = (e) => {
        const pos = e.mapBrowserEvent.coordinate
        if (!this.isAddedMarker) {
          this.map.addOverlay(this.marker.createOverlay())
          this.isAddedMarker = true
        }
        this.marker.getOverlay().setPosition(pos)
        this.markerEndCallback(pos)
      }
      this.map.addInteraction(this.selection)
    }
    this.selection.on('select', this.selectionListerner)
    return true
  }

  // close() 	none 	关闭标注工具。
  close() {
    if (this.selection != null) {
      this.selection.un('select', this.selectionListerner)
      this.map.removeOverlay(this.marker.getOverlay())
      this.isAddedMarker = false
    }
  }
}

export default PushpinTool
